/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javadoc.search; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeEvent; import java.util.Collection; import java.util.Enumeration; import java.util.ArrayList; import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.cookies.FilterCookie; import org.openide.src.*; import org.openide.TopManager; import org.openide.filesystems.*; import org.openide.loaders.DataFolder; import org.openide.loaders.DataFilter; import org.openide.util.WeakListener; /** Implements children for basic source code patterns * * @author Petr Hrebejk */ public class JavaDocChildren extends Children.Keys implements RepositoryListener { private PropertyChangeListener fsPCL = new fsChangeListener(); //private WeakListener.PropertyChange wFsPCL = new WeakListener.PropertyChange( fsPCL ); private PropertyChangeListener wFsPCL = WeakListener.propertyChange( fsPCL, null ); private PropertyChangeListener capabilityPCL = new capChangeListener(); //private WeakListener.PropertyChange wCapabilityPCL = new WeakListener.PropertyChange( capabilityPCL ); private PropertyChangeListener wCapabilityPCL = WeakListener.propertyChange( capabilityPCL, null ); // Constructors ----------------------------------------------------------------------- /** Create pattern children. The children are initilay unfiltered. * @param elemrent the atteached class. For this class we recognize the patterns */ public JavaDocChildren () { super(); Repository repository = TopManager.getDefault().getRepository(); // Add repository listener repository.addRepositoryListener( WeakListener.repository( this, repository ) ); // Add listeners to all existing file systems Enumeration fsEnum = repository.getFileSystems(); while( fsEnum.hasMoreElements() ) { FileSystem fs = (FileSystem)fsEnum.nextElement(); fs.addPropertyChangeListener( wFsPCL ); fs.getCapability().addPropertyChangeListener( wCapabilityPCL ); } } /** Called when the preparetion of nodes is needed */ protected void addNotify() { setKeys ( getDocFileSystems() ); } /** Called when all children are garbage collected */ protected void removeNotify() { setKeys( java.util.Collections.EMPTY_SET ); } // Children.keys implementation ------------------------------------------------------- /** Creates nodes for given key. */ protected Node[] createNodes( final Object key ) { //if ( key instanceof FileSystem ) Node newNode; try { newNode = new JavaDocFSNode( key, getFSChildren( (FileSystem)key ) ); return new Node[] { newNode }; } catch ( java.beans.IntrospectionException e ) { // No node will be created } return new Node[0]; } // Utility methods -------------------------------------------------------------------- private Collection getDocFileSystems() { // System.out.println(" DOC FS " ); // NOI18N // Thread.dumpStack(); Enumeration dfsEnum = FileSystemCapability.DOC.fileSystems(); ArrayList docFileSystems = new ArrayList(); while( dfsEnum.hasMoreElements() ) { FileSystem fs = (FileSystem) dfsEnum.nextElement(); // System.out.println(" FS : " + fs ); // NOI18N docFileSystems.add( fs ); } return docFileSystems; } void refreshFs( Object fs ) { // System.out.println(" Refrefh FS " + fs ); // NOI18N refreshKey( fs ); } private Children getFSChildren( FileSystem fs ) { DataFolder df = DataFolder.findFolder( fs.getRoot() ); return df.createNodeChildren( DataFilter.ALL ); } // Implementation of repository listener ------------------------------------------------------- public void fileSystemAdded(RepositoryEvent ev) { FileSystem fs = ev.getFileSystem(); fs.addPropertyChangeListener( wFsPCL ); fs.getCapability().addPropertyChangeListener( wCapabilityPCL ); setKeys ( getDocFileSystems() ); } public void fileSystemPoolReordered(RepositoryReorderedEvent ev) { setKeys ( getDocFileSystems() ); } public void fileSystemRemoved(RepositoryEvent ev) { FileSystem fs = ev.getFileSystem(); fs.removePropertyChangeListener( wFsPCL ); fs.getCapability().removePropertyChangeListener( wCapabilityPCL ); setKeys ( getDocFileSystems() ); } void refreshAll( ) { setKeys ( getDocFileSystems() ); } // Innerclass listener to file system's properties & capabilites of the file systems class fsChangeListener implements PropertyChangeListener { public void propertyChange( PropertyChangeEvent evt ) { if ( evt.getPropertyName().equals( FileSystem.PROP_ROOT ) ) refreshFs( evt.getSource() ); } } class capChangeListener implements PropertyChangeListener { public void propertyChange( PropertyChangeEvent evt ) { if ( evt.getPropertyName().equals( "doc" ) ) refreshAll(); } } } /* * Log * 4 Gandalf 1.3 1/15/00 Petr Hrebejk New WeakListener * implementation * 3 Gandalf 1.2 1/13/00 Petr Hrebejk i18n mk3 * 2 Gandalf 1.1 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 1 Gandalf 1.0 8/13/99 Petr Hrebejk * $ */